package main

import (
	`database/sql`
	`fmt`
)

func main() {
	if err := GetUserInfo(14510); err != nil {
		return
	}
}

// GetUserInfo 获取用户详情(使用 warp error)
// 为什么要使用warp error?
// 使用warp error能更规范的输出项目中遇到的错误信息，也可以使用errors.Unwarp, errors.Is, errors.As来解析当前的error对象
func GetUserInfo(uid int) error {
	if uid < 0 {
		return nil
	}
	var username string
	db := sql.DB{}
	err := db.QueryRow(fmt.Sprintf(`select username from uid = %d`, uid)).Scan(&username)
	if err != sql.ErrNoRows {
		// 通过warp包装err(可通过runtime.Caller(0)获取文件名，文件路径，行号等信息)
		err = fmt.Errorf("用户数据查询失败(文件-main.go,行号-138)：%w", err)
		return err
	}
	fmt.Println(username)
	return nil
}